// pages/Register/Register.js
const api = require("../../config/api.js")
var amapFile = require('../../libs/amap-wx.130.js'); //如：..­/..­/libs/amap-wx.130.js
Page({

  data: {
    ImgList: [], // 用于存储上传的图片
    customerUserHead: '',
    customerUserName: '',
    customerUserPhone: '',
    customerUserPwd: '',
    customerUserPosition: '',
    customerName: '',
    customerProvince: '',
    customerCity: '',
    customerRegion: '',
    customerAddress: '',
    // 写死
    customerLongitude: 106.57,
    // 写死
    customerLatitude: 29.55,
    customerCategory:'',
    customerLicense: '',
    customerEmergencyUserName: '',
    customerEmergencyUserPhone: ''
  },

  // 返回按钮
  onBack() {
    wx.navigateBack({
      delta: 1
    });
  },

  // 输入单位名称
  onInputCustomerName(e) {
    this.setData({
      customerName: e.detail.value
    });
  },

  // 输入所在地区
  onInputCustomerRegion(e) {
    // this.setData({
    //   customerProvince: e.detail.value.split(' ')[0],
    //   customerCity: e.detail.value.split(' ')[1],
    //   customerRegion: e.detail.value.split(' ')[2]
    // });
  },

  // 输入详细地址
  onInputCustomerAddress(e) {
    this.setData({
      customerAddress: e.detail.value
    });
  },

  // 选择单位类别
  onSelectCategory: function (e) {
    const category = e.currentTarget.dataset.category;
    this.setData({
      customerCategory: category // 更新选中类别
    }, () => {
      console.log('Selected category updated to:', this.data.customerCategory);
    });
  },

  // 上传管理人头像
  onUploadAvatar: function () {
    this.onUploadFile((uploadedUrl) => {
      // 设置头像的 URL
      this.setData({
        customerUserHead: uploadedUrl
      });
    });
  },

  // 上传营业执照
  onUploadLicense: function () {
    this.onUploadFile((uploadedUrl) => {
      // 设置营业执照的 URL
      this.setData({
        customerLicense: uploadedUrl
      });
    });
  },
  // 通用文件上传函数
  onUploadFile: function (successCallback) {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'], // 图片压缩类型
      sourceType: ['album', 'camera'],
      success: (chooseResult) => {
        const tempFilePath = chooseResult.tempFilePaths[0];
        // 上传图片到服务器
        wx.uploadFile({
          url: api.uploadFile,
          filePath: tempFilePath, // 本地文件路径
          name: 'file',
          success: (uploadResult) => {
            const data = JSON.parse(uploadResult.data);
            console.log('上传文件结果');
            console.log(data);
            if (data.code === 200) {
              wx.showToast({
                title: '上传成功',
                icon: 'success'
              });
              // 执行上传成功后的回调
              if (typeof successCallback === 'function') {
                successCallback(data.data);
              }
            } else {
              wx.showToast({
                title: '上传失败1',
                icon: 'none'
              });
            }
          },
          fail: (error) => {
            console.log(error);
            wx.showToast({
              title: '上传失败2',
              icon: 'none'
            });
          }
        });
      },
      fail: () => {
        wx.showToast({
          title: '选择图片失败',
          icon: 'none'
        });
      }
    });
  },
  // 输入管理人姓名
  onInputManagerName(e) {
    this.setData({
      customerUserName: e.detail.value
    });
  },

  // 输入管理人手机号
  onInputManagerPhone(e) {
    this.setData({
      customerUserPhone: e.detail.value
    });
  },

  // 输入管理人密码
  onInputManagerPassword(e) {
    this.setData({
      customerUserPwd: e.detail.value
    });
  },

  // 输入管理人职务
  onInputManagerPosition(e) {
    this.setData({
      customerUserPosition: e.detail.value
    });
  },

  // 输入紧急联系人
  onInputEmergencyName(e) {
    this.setData({
      customerEmergencyUserName: e.detail.value
    });
  },

  // 输入紧急联系人手机号
  onInputEmergencyPhone(e) {
    this.setData({
      customerEmergencyUserPhone: e.detail.value
    });
  },

  onBack: function () {
    wx.navigateBack({
      delta: 1
    });
  },

  onLogin: function (e) {
    wx.reLaunch({
      url: '/pages/Login/Login',
    })
  },
  // 校验字段是否为空
  validateFields: function () {
    this.updateImgFile()
    const fieldsToCheck = [
      'customerUserHead',
      'customerUserName',
      'customerUserPhone',
      'customerUserPwd',
      'customerUserPosition',
      'customerName',
      'customerProvince',
      'customerCity',
      'customerRegion',
      'customerAddress',
      'customerLongitude',
      'customerLatitude',
      'customerCategory',
      'customerLicense',
      'customerEmergencyUserName',
      'customerEmergencyUserPhone'
    ];
    console.log('所有值',this.data)
    for (const fieldKey of fieldsToCheck) {
      const value = this.data[fieldKey];
      console.log(fieldKey, ':', value)
      if (!value || (typeof value === 'string' && value.trim() === '')) {
        wx.showToast({
          title: `${this.getFieldName(fieldKey)}不能为空`,
          icon: 'none'
        });
        return false; // 校验失败
      }
      if (fieldKey === 'customerUserPwd' && value.length < 6) {
        wx.showToast({
          title: '密码不能少于6位',
          icon: 'none'
        });
        return false; // 校验失败
      }
    }

    return true; // 校验通过
  },

  // 显示字段对应的名称
  getFieldName: function (fieldKey) {
    const fieldNames = {
      customerUserHead: '管理人头像',
      customerUserName: '管理人姓名',
      customerUserPhone: '管理人手机号',
      customerUserPwd: '管理人密码',
      customerUserPosition: '管理人职务',
      customerName: '单位名称',
      customerProvince: '省份',
      customerCity: '城市',
      customerRegion: '区域',
      customerAddress: '详细地址',
      customerLongitude: '经度',
      customerLatitude: '纬度',
      customerCategory: '单位类别',
      customerLicense: '单位证照',
      customerEmergencyUserName: '紧急联系人姓名',
      customerEmergencyUserPhone: '紧急联系人手机号'
    };
    return fieldNames[fieldKey] || '未知字段';
  },

  onRegisterSuccess: function (e) {
    // if (!this.validateFields()) {
    //   return; // 如果校验失败，直接返回
    // }

    const {
        customerUserHead,
        customerUserName,
        customerUserPhone,
        customerUserPwd,
        customerUserPosition,
        customerName,
        customerProvince,
        customerCity,
        customerRegion,
        customerAddress,
        customerLongitude,
        customerLatitude,
        customerCategory,
        customerLicense,
        customerEmergencyUserName,
        customerEmergencyUserPhone
      } = this.data;
      console.log(this.data)

    // 更正校验字段
    if(customerUserName == ''){
        wx.showToast({
          title: '管理人姓名不能为空',
          icon: 'none'
        })
        return;
    }else if(customerUserPhone == ''){
        wx.showToast({
            title: '管理人电话不能为空',
            icon: 'none'
          })
          return;
    }else if(customerUserPwd == ''){
        wx.showToast({
            title: '管理人密码不能为空',
            icon: 'none'
          })
          return;
    }else if(customerName == ''){
        wx.showToast({
            title: '客户(单位)名称不能为空',
            icon: 'none'
          })
          return;
    }else if(customerCategory == ''){
        wx.showToast({
            title: '客户(单位)类别不能为空',
            icon: 'none'
          })
          return;
    }
    
    // 检查身份证和手机号是否只包含数字
    const isNumeric = (str) => /^\d+$/.test(str);

    // 判断手机号
    if (!isNumeric(customerUserPhone)) {
        wx.showToast({
          title: '电话号码只能为数字',
          icon: 'none'
        });
        return;
      }
    // 判断身份证号
      if (customerUserPwd.length < 6) {
        wx.showToast({
          title: '密码位数小于6',
          icon: 'none'
        });
        return;
      }
    
    //注册
    wx.request({
      url: api.userRegister,
      method: 'POST',
      data: {
        customerUserHead,
        customerUserPosition,
        customerUserName,
        customerUserPhone,
        customerUserPwd,
        customerName,
        customerProvince,
        customerCity,
        customerRegion,
        customerAddress,
        customerLongitude,
        customerLatitude,
        customerCategory,
        customerLicense,
        customerEmergencyUserName,
        customerEmergencyUserPhone
      },
      success: function (res) {
        wx.hideLoading()
        if (res.data.code == 200) {
          wx.showToast({
            title: "成功",
            icon: "none"
          })
          wx.navigateBack({
            delta: 1
          });
        } else {
          wx.showToast({
            title: res.data.mesage,
            icon: "none"
          })
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 获取用户位置
    var that = this;
    var myAmapFun = new amapFile.AMapWX({
      key: 'd7d8fdf44090282bb11954ab2acc852a'
    });
    myAmapFun.getRegeo({
      success: function (data) {
        //成功回调
        console.log('成功回调', data)
        that.setData({
          customerProvince: data[0].regeocodeData.addressComponent.province,
          customerCity: data[0].regeocodeData.addressComponent.province,// 市数据？
          customerRegion: data[0].regeocodeData.addressComponent.district,
        //   customerLongitude:data[0].longitude,
        //   customerLatitude:data[0].latitude,
        })
      },
      fail: function (info) {
        //失败回调
        console.log(info)
      }
    })
    // this.getUserLocation()
  },
  getUserLocation() {
    const that = this;
    // 请求用户授权并获取经纬度
    wx.getLocation({
      type: 'wgs84', // 返回 GPS 坐标
      success(res) {
        const latitude = res.latitude; // 纬度
        const longitude = res.longitude; // 经度
        that.setData({
          customerLatitude: latitude,
          customerLongitude: longitude,
        })
        console.log(latitude, longitude)
        // 调用地理位置解析 API
        // that.getLocationDetails(latitude, longitude);
      },
      fail(err) {
        console.error("获取位置失败", err);
        wx.showToast({
          title: '无法获取位置',
          icon: 'none'
        });
      }
    });
  },
  getLocationDetails(latitude, longitude) {
    const that = this;
    // 高德地图 API Key
    const apiKey = 'd7d8fdf44090282bb11954ab2acc852a';
    const url = `https://restapi.amap.com/v3/geocode/regeo?location=${longitude},${latitude}&key=${apiKey}`;
    wx.request({
      url,
      success(res) {
        console.log(res.data)
        if (res.data.status === '1') {
          const result = res.data.regeocode.addressComponent;
          console.log('解析地址', result)
          that.setData({
            location: {
              latitude,
              longitude,
              province: result.province,
              city: result.city,
              district: result.district
            }
          });
        } else {
          console.error('位置解析失败', res.data);
          wx.showToast({
            title: '解析位置失败',
            icon: 'none'
          });
        }
      },
      fail(err) {
        console.error('请求地理位置解析接口失败', err);
        wx.showToast({
          title: '请求失败',
          icon: 'none'
        });
      }
    });
  },
   // 删除图片
   onDeleteImage: function (e) {
    const index = e.currentTarget.dataset.index; // 获取要删除的图片索引
    const updatedImgList = [...this.data.ImgList];
    updatedImgList.splice(index, 1); // 删除指定索引的图片

    this.setData({
      ImgList: updatedImgList
    });

    wx.showToast({
      title: '图片已删除',
      icon: 'none'
    });
  },
  // 拼接图片
  updateImgFile: function () {
    const { ImgList } = this.data; // 获取 ImgList 数组
    const ImgFile = ImgList.join('&&'); // 使用&&拼接数组中的所有 URL
    this.setData({
      customerLicense: ImgFile // 更新 ImgFile 的值
    });
    console.log('拼接后的 ImgFile:', ImgFile);
  },
  onUploadImage1: function () {
    const maxCount = 1 - this.data.ImgList.length; // 剩余可上传的图片数量
    if (maxCount <= 0) {
      wx.showToast({
        title: '最多上传1张图片',
        icon: 'none'
      });
      return;
    }
    // 调用文件上传接口
    this.uploadFile({
      fileType: 'image', // 文件类型
      count: maxCount, // 本次允许选择的图片数量
      successCallback: (fileUrl) => {
        console.log('上传图片地址:', fileUrl);

        // 将新上传的图片 URL 添加到 ImgList 中
        this.setData({
          ImgList: [fileUrl, ...this.data.ImgList]
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  // 通用文件上传函数
  uploadFile: function (options) {
    const {
      filePath,
      fileType, // 文件类型
      sourceType = ['album', 'camera'], // 选择文件来源
      count = 1, // 可选择的文件数量
      name = 'file', // 后端接收文件的字段名
      successCallback, // 上传成功后的回调
      failCallback // 上传失败后的回调
    } = options;
    if (filePath) {
      console.log('已有文件')
      wx.uploadFile({
        url: api.uploadFile,
        filePath: filePath, // 本地文件路径
        name: name, // 后端接收文件的字段名
        success: (uploadResult) => {
          const data = JSON.parse(uploadResult.data);
          console.log('上传文件结果:', data);
          if (data.code === 200) {
            wx.showToast({
              title: '上传成功',
              icon: 'success'
            });
            if (typeof successCallback === 'function') {
              successCallback(data.data); // 执行成功回调，传入文件地址
            }
          } else {
            wx.showToast({
              title: data.message || '上传失败',
              icon: 'none'
            });
            if (typeof failCallback === 'function') {
              failCallback(data);
            }
          }
        },
        fail: (error) => {
          console.error('上传失败:', error);
          wx.showToast({
            title: '上传失败，请重试',
            icon: 'none'
          });
          if (typeof failCallback === 'function') {
            failCallback(error);
          }
        }
      });
    } else {
      console.log('选择文件')
      // 选择文件
      wx.chooseMedia({
        count: count, // 可以选择的数量
        mediaType: ['image', 'video'], // 媒体类型，可以是图片或视频
        sourceType: ['album', 'camera'], // 来源，相册或相机
        success: (chooseResult) => {
          const filePath = chooseResult.tempFiles[0].tempFilePath; // 获取文件路径
          console.log('选择的文件路径:', filePath);
      
          // 上传文件到服务器
          wx.uploadFile({
            url: api.uploadFile, // 上传接口
            filePath: filePath, // 本地文件路径
            name: name, // 后端接收文件的字段名
            success: (uploadResult) => {
              const data = JSON.parse(uploadResult.data);
              console.log('上传文件结果:', data);
              if (data.code === 200) {
                wx.showToast({
                  title: '上传成功',
                  icon: 'success'
                });
                if (typeof successCallback === 'function') {
                  successCallback(data.data); // 执行成功回调，传入文件地址
                }
              } else {
                wx.showToast({
                  title: data.message || '上传失败',
                  icon: 'none'
                });
                if (typeof failCallback === 'function') {
                  failCallback(data);
                }
              }
            },
            fail: (error) => {
              console.error('上传失败:', error);
              wx.showToast({
                title: '上传失败，请重试',
                icon: 'none'
              });
              if (typeof failCallback === 'function') {
                failCallback(error);
              }
            }
          });
        },
        fail: (err) => {
          console.error('选择媒体失败:', err);
          wx.showToast({
            title: '选择媒体失败',
            icon: 'none'
          });
          if (typeof failCallback === 'function') {
            failCallback(err);
          }
        }
      });
    }
  },
})